import 'package:shared_preferences/shared_preferences.dart';

import '../constants/index.dart';

/// Token管理类，用于管理应用中的Token信息，包括保存、获取和删除Token。
class TokenManager {
  ///定义一个静态的TokenManager实例，用于全局访问。
  String? _token;

  ///刷新token
  String? _refreshToken;

  /// 私有方法，用于获取SharedPreferences实例。
  /// 该方法返回一个Future，该Future会在获取到SharedPreferences实例后完成。
  Future<SharedPreferences> _getInstance() {
    return SharedPreferences.getInstance();
  }

  // 项目启动时进行初始化
  init() async {
    final instance = await _getInstance(); // 获取实例对象
    _token = instance.getString(GlobalVariable.TOKEN) ?? "";
    _refreshToken = instance.getString(GlobalVariable.REFRESH_TOKEN) ?? "";
  }

  /// 保存Token到本地存储。
  /// [token] 要保存的Token字符串。
  /// 返回一个Future，该Future会在Token保存成功后完成。
  void saveToken(String token, {String? refreshToken}) async {
    final prefs = await _getInstance();
    prefs.setString(GlobalVariable.TOKEN, token);
    _token = token;
    // 更新刷新token,如果刷新Token不为空，则保存到本地存储中。
    if (refreshToken != null) {
      prefs.setString(GlobalVariable.REFRESH_TOKEN, refreshToken);
      _refreshToken = refreshToken;
    }
  }

  /// 从本地存储中获取Token。
  /// 返回一个Future，该Future会在获取到Token后完成，若未找到Token则返回null。
  String getToken() {
    return _token ?? '';
  }

  /// 从本地存储中获取刷新Token。
  /// 返回一个Future，该Future会在获取到Token后完成，若未找到Token则返回null。
  String getRefreshToken() {
    return _refreshToken ?? '';
  }

  /// 从本地存储中删除Token。
  /// 返回一个Future，该Future会在Token删除成功后完成。
  Future<void> deleteToken() async {
    final prefs = await _getInstance();
    await prefs.remove(GlobalVariable.TOKEN); // 删除token
    _token = '';
    await prefs.remove(GlobalVariable.REFRESH_TOKEN); //  删除refresh_token
    _refreshToken = '';
  }
}

final tokenManager = TokenManager();
